package com.maxPriorityQueue;

/**
 * 优先队列
 *
 * @author 罗俊华
 * @date 2021/5/12 - 10:13 上午
 */
public interface MaxPriorityQueue<Key extends Comparable<Key>> {
    /**
     * 向优先队列中插入一个元素
     *
     * @param key
     */
    void insert(Key key);

    /**
     * 返回最大的元素
     *
     * @return
     */
    Key getMax();

    /**
     * 删除并返回最大的元素
     *
     * @return
     */
    Key delMax();

    boolean isEmpty();

    int size();

    /**
     * 交换两个堆中的元素
     *
     * @param i
     * @param j
     */
    void exchange(int i, int j);

    /**
     * 将大的元素上浮
     * @param k
     */
    void floatUp(int k);

    /**
     * 将小的元素下沉
     * @param k
     */
    void sink(int k);

    boolean less(int i, int j);

}
